gusucode.com > VC++ 实现在其它程序窗口上创建按钮并控制-源码程序 > VC++ 实现在其它程序窗口上创建按钮并控制-源码程序\code\wndproc_dll\main.cpp
//Download by http://www.NewXing.com //响应创建按钮的消息 #include <windows.h> #include <commctrl.h> DWORD g_dwID = 0; WNDPROC g_wndProc = NULL; HWND g_hWnd = NULL; TCHAR g_szCaption[255] = {'\0'}; BOOL WINAPI DllMain(HANDLE hInstance, ULONG Command, LPVOID Reserved) { return TRUE; } LRESULT APIENTRY RC_WndProcA( //此函数暂时没用 HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg){ case WM_COMMAND: switch (HIWORD(wParam)){ case BN_CLICKED: if (LOWORD(wParam) == g_dwID){ MessageBox(NULL, "take careful, you click my button", "haha", MB_OK); return 0; } break; } break; } return CallWindowProc(g_wndProc, hwndDlg, uMsg, wParam, lParam); } BOOL WINAPI RC_InitBtnA(DWORD dwID, LPCTSTR szCaption, RECT r, HWND hWnd) { HWND hwndButton = CreateWindow( "BUTTON", // predefined class szCaption, // button text WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, r.left, r.top, r.right - r.left, r.bottom - r.top, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE), NULL); if (!hwndButton)return FALSE; MSG msg; ::SetWindowPos(hwndButton, HWND_TOP, r.left, r.top, r.right - r.left, r.bottom - r.top, SWP_NOACTIVATE); InvalidateRect(hwndButton, NULL, TRUE); UpdateWindow(hwndButton); BOOL bRet; while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0) { if (bRet == -1) { // handle the error and possibly exit } else { if (msg.message == WM_LBUTTONUP){ POINT pt; pt.x = LOWORD(msg.lParam); pt.y = HIWORD(msg.lParam); MessageBox(NULL, "take careful, you click my button", "haha", MB_OK); ::SendMessage(hwndButton, WM_KILLFOCUS, NULL, 0); continue; } TranslateMessage(&msg); DispatchMessage(&msg); } } return hwndButton != NULL; }